package fairygui.editor.gui.text
{
   import flash.text.TextField;
   import flash.text.TextFormat;
   
   public class EHtmlText
   {
       
      
      public var parsedText:String;
      
      public var elements:Vector.<EHtmlElement>;
      
      public function EHtmlText(param1:String)
      {
         var ignoreWhitespace:Boolean = false;
         var xml:XML = null;
         var list:XMLList = null;
         var val:String = param1;
         super();
         this.elements = new Vector.<EHtmlElement>();
         try
         {
            val = val.replace(/\r\n/g,"\n");
            val = val.replace(/\r/g,"\n");
            ignoreWhitespace = XML.ignoreWhitespace;
            XML.ignoreWhitespace = false;
            xml = new XML("<dummy>" + val + "</dummy>");
            XML.ignoreWhitespace = ignoreWhitespace;
            list = xml.children();
            this.parsedText = "";
            this.parseXML(list);
            return;
         }
         catch(e:*)
         {
            parsedText = val;
            elements.length = 0;
            return;
         }
      }
      
      public function appendTo(param1:TextField) : void
      {
         var _loc4_:EHtmlElement = null;
         var _loc2_:int = param1.text.length;
         param1.replaceText(_loc2_,_loc2_,this.parsedText);
         var _loc3_:int = this.elements.length - 1;
         while(_loc3_ >= 0)
         {
            _loc4_ = this.elements[_loc3_];
            param1.setTextFormat(_loc4_.textformat,_loc2_ + _loc4_.start,_loc2_ + _loc4_.end + 1);
            _loc3_--;
         }
      }
      
      private function parseXML(param1:XMLList) : void
      {
         var _loc3_:String = null;
         var _loc4_:XMLList = null;
         var _loc5_:XML = null;
         var _loc6_:TextFormat = null;
         var _loc7_:int = 0;
         var _loc8_:EHtmlElement = null;
         var _loc10_:String = null;
         var _loc2_:int = param1.length();
         var _loc9_:int = 0;
         while(_loc9_ < _loc2_)
         {
            _loc5_ = param1[_loc9_];
            _loc3_ = _loc5_.name();
            if(_loc3_ == "font")
            {
               _loc6_ = new TextFormat();
               _loc4_ = _loc5_.attribute("size");
               if(_loc4_.length())
               {
                  _loc6_.size = int(_loc4_[0]);
               }
               _loc4_ = _loc5_.attribute("color");
               if(_loc4_.length())
               {
                  _loc6_.color = parseInt(_loc4_[0].substr(1),16);
               }
               _loc4_ = _loc5_.attribute("italic");
               if(_loc4_.length())
               {
                  _loc6_.italic = _loc4_[0] == "true";
               }
               _loc4_ = _loc5_.attribute("underline");
               if(_loc4_.length())
               {
                  _loc6_.underline = _loc4_[0] == "true";
               }
               _loc4_ = _loc5_.attribute("face");
               if(_loc4_.length())
               {
                  _loc6_.font = _loc4_[0];
               }
               _loc7_ = this.parsedText.length;
               if(_loc5_.hasSimpleContent())
               {
                  this.parsedText = this.parsedText + _loc5_.text();
               }
               else
               {
                  this.parseXML(_loc5_.children());
               }
               if(this.parsedText.length > _loc7_)
               {
                  _loc8_ = new EHtmlElement();
                  _loc8_.start = _loc7_;
                  _loc8_.end = this.parsedText.length - 1;
                  _loc8_.textformat = _loc6_;
                  this.elements.push(_loc8_);
               }
            }
            else if(_loc3_ == "a")
            {
               _loc6_ = new TextFormat();
               _loc6_.underline = true;
               _loc6_.url = "#";
               _loc7_ = this.parsedText.length;
               if(_loc5_.hasSimpleContent())
               {
                  this.parsedText = this.parsedText + _loc5_.text();
               }
               else
               {
                  this.parseXML(_loc5_.children());
               }
               if(this.parsedText.length > _loc7_)
               {
                  _loc8_ = new EHtmlElement();
                  _loc8_.type = 1;
                  _loc8_.start = _loc7_;
                  _loc8_.end = this.parsedText.length - 1;
                  _loc8_.textformat = _loc6_;
                  _loc8_.id = _loc5_.attribute("id").toString();
                  _loc8_.href = _loc5_.attribute("href").toString();
                  _loc8_.target = _loc5_.attribute("target").toString();
                  this.elements.push(_loc8_);
               }
            }
            else if(_loc3_ == "img")
            {
               _loc7_ = this.parsedText.length;
               _loc6_ = new TextFormat();
               this.parsedText = this.parsedText + "　";
               _loc8_ = new EHtmlElement();
               _loc8_.type = 2;
               _loc8_.id = _loc5_.attribute("id").toString();
               _loc8_.src = _loc5_.attribute("src").toString();
               _loc8_.width = int(_loc5_.attribute("width").toString());
               _loc8_.height = int(_loc5_.attribute("height").toString());
               _loc8_.start = _loc7_;
               _loc8_.end = this.parsedText.length - 1;
               _loc8_.textformat = _loc6_;
               this.elements.push(_loc8_);
            }
            else if(_loc3_ == "b")
            {
               _loc6_ = new TextFormat();
               _loc6_.bold = true;
               _loc7_ = this.parsedText.length;
               if(_loc5_.hasSimpleContent())
               {
                  this.parsedText = this.parsedText + _loc5_.text();
               }
               else
               {
                  this.parseXML(_loc5_.children());
               }
               if(this.parsedText.length > _loc7_)
               {
                  _loc8_ = new EHtmlElement();
                  _loc8_.start = _loc7_;
                  _loc8_.end = this.parsedText.length - 1;
                  _loc8_.textformat = _loc6_;
                  this.elements.push(_loc8_);
               }
            }
            else if(_loc3_ == "i")
            {
               _loc6_ = new TextFormat();
               _loc6_.italic = true;
               _loc7_ = this.parsedText.length;
               if(_loc5_.hasSimpleContent())
               {
                  this.parsedText = this.parsedText + _loc5_.text();
               }
               else
               {
                  this.parseXML(_loc5_.children());
               }
               if(this.parsedText.length > _loc7_)
               {
                  _loc8_ = new EHtmlElement();
                  _loc8_.start = _loc7_;
                  _loc8_.end = this.parsedText.length - 1;
                  _loc8_.textformat = _loc6_;
                  this.elements.push(_loc8_);
               }
            }
            else if(_loc3_ == "u")
            {
               _loc6_ = new TextFormat();
               _loc6_.underline = true;
               _loc7_ = this.parsedText.length;
               if(_loc5_.hasSimpleContent())
               {
                  this.parsedText = this.parsedText + _loc5_.text();
               }
               else
               {
                  this.parseXML(_loc5_.children());
               }
               if(this.parsedText.length > _loc7_)
               {
                  _loc8_ = new EHtmlElement();
                  _loc8_.start = _loc7_;
                  _loc8_.end = this.parsedText.length - 1;
                  _loc8_.textformat = _loc6_;
                  this.elements.push(_loc8_);
               }
            }
            else if(_loc3_ == "br")
            {
               this.parsedText = this.parsedText + "\n";
            }
            else if(_loc5_.nodeKind() == "text")
            {
               _loc10_ = _loc5_.toString();
               this.parsedText = this.parsedText + _loc10_;
            }
            else
            {
               this.parseXML(_loc5_.children());
            }
            _loc9_++;
         }
      }
   }
}
